

https://leetcode.cn/problems/course-schedule-ii/description/
//class Solution {
//public:
//    vector<int> findOrder(int n, vector<vector<int>>& prerequisites) {
//        unordered_map<int, vector<int>> hash;
//        vector<int> in(n);
//
//        for (auto& e : prerequisites) {
//            int a = e[0], b = e[1];
//            hash[b].push_back(a);
//            in[a]++;
//        }
//
//        vector<int> v;
//        queue<int> q;
//        for (int i = 0; i < n; i++) {
//            if (in[i] == 0) {
//                q.push(i);
//                v.push_back(i);
//            }
//        }
//
//        while (q.size()) {
//
//            int a = q.front();
//            q.pop();
//            for (auto& x : hash[a]) {
//                in[x]--;
//                if (in[x] == 0) {
//                    q.push(x);
//                    v.push_back(x);
//                }
//            }
//        }
//
//        return v.size() == n ? v : vector<int>();
//    }
//};


https://leetcode.cn/problems/course-schedule/description/https://leetcode.cn/problems/course-schedule/description/
//class Solution {
//public:
//    bool canFinish(int n, vector<vector<int>>& prerequisites) {
//        unordered_map<int, vector<int>> hash;
//        vector<int> in(n);
//
//        for (auto& e : prerequisites) {
//            int a = e[0], b = e[1];
//            hash[b].push_back(a);
//            in[a]++;
//        }
//
//        queue<int> q;
//        for (int i = 0; i < n; i++) {
//            if (in[i] == 0) {
//                q.push(i);
//            }
//        }
//
//        while (q.size()) {
//            int a = q.front();
//            q.pop();
//            for (auto& x : hash[a]) {
//                in[x]--;
//                if (in[x] == 0) {
//                    q.push(x);
//                }
//            }
//        }
//
//        for (int i = 0; i < n; i++) {
//            if (in[i] != 0) {
//                return false;
//            }
//        }
//        return true;
//    }
//};